const { MongoClient, ObjectId } = require('mongodb')

const client = new MongoClient('mongodb://127.0.0.1:27017')

// 一、测试连接
// async function run() {
//     try {
//         // console.log('开始连接......')
//         // 开始连接
//         await client.connect()
//         // 连接test库
//         const testDb = client.db('test')
//         // console.log(testDb)
//         // 连接库里的集合users(相当于rdb的table)
//         const usersCollection = testDb.collection('users')
//         // console.log(usersCollection)
//         // 查询users表的所有数据
//         const result = await usersCollection.find()
//         // toArray()返回的是个promise，需要await一下
//         // console.log(result.toArray())
//         console.log(await result.toArray())
//     } catch (err) {
//         console.log('连接失败', err)
//     } finally {
//         // 关闭连接
//         await client.close()
//     }
// }

// 二、crud操作
async function run() {
    try {
        await client.connect()
        const testDb = client.db('test')
        const usersCollection = testDb.collection('users')
        // 创建文档--单个插入
        // const result = await usersCollection.insertOne({
        //     a: 1,
        //     b: 'nihao',
        //     c: true,
        //     d: [1,2,3]
        // })
        // 创建文档--多个插入
        // const class1 = [
        //     {name: '张三', age: 18, hobby: ['打篮球', '踢足球']},
        //     {name: '李四', age: 19, hobby: ['打篮球', '打羽毛球']},
        //     {name: '万五', age: 17, hobby: ['游泳', '打羽毛球']},
        //     {name: '赵六', age: 19, hobby: ['攀岩', '下棋', '画画']},
        //     {name: '周琦', age: 20, hobby: ['打篮球', '打羽毛球']}
        // ]
        // const result = await usersCollection.insertMany(class1)
        // console.log(result)

        // 查询文档
        // 查询一个
        // const result = await usersCollection.findOne({
        //     name: '张三'
        // })
        // console.log(result) // 直接是结果对象
        // 查询所有
        // const result = await usersCollection.find() // 是一个Promis对象
        // console.log(await result.toArray())

        // 删除文档
        // const result = usersCollection.deleteOne({
        //     // _id: '60f2311217921e6edcbdf6c8' // 注意：这个样写会删除不了
        //     _id: ObjectId('60f2311217921e6edcbdf6c8') // 可删除成功
        // })
        // console.log(await result)

        // 更新文档
        // const result = await usersCollection.updateOne({
        //     _id: ObjectId('60f055421989768e189988db')    
        // }, {
        //     $set: {
        //         name: '小明'
        //     }
        // })
        // console.log(result)
        // 替换文档
        const result = await usersCollection.replaceOne({
            _id: ObjectId('60f055421989768e189988db')
        }, {
            name: '小明',
            age: 20,
            hobby: ['跑步']
        })
        console.log(result)
    } catch (err) {
        console.log('连接失败', err)
    } finally {
        client.close()
    }
}
// 开始连接
// client.connect().then(() =>{
//     // 连接成功
// }).catch(() => {
//     console.log('连接失败了')
// })
run()
